package com.hfb.mashibing.alip8.juc.c020_01_interview.A1B2C3; /**
 * 描述: 要求用线程顺序打A1B2C3....Z26
 */

import java.io.IOException;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

/**
 * 描述: TransferQueue的作用
 * 就相当于生产者消费者模式，将一个对象transfer进队列中，即生产，等待别的线程来消费该对象
 * take()用来消费，当队列中没有对象时，相当于没有产品，得等待生产者生产产品以供消费者消费，
 * 即这里的用两个线程相互打印对方的信息
 */


public class T01_08_Question {


    public static void main(String[] args) throws IOException {

        char[] aC = new char[26];

        for (int i = 0; i < 26; i++) {
            aC[i] = (char) (i + 49);
        }

        TransferQueue<String> queue = new LinkedTransferQueue<>();

        new Thread(() -> {
            byte[] buffer = new byte[30];
            try {
                for (int i = 0; i < 26; i++) {
                    //生产字母等对方线程消费
                    queue.transfer((char) ('A' + i) + "");

                    //消费对方线程生产的数字
                    System.out.print(queue.take());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }).start();


        new Thread(() -> {
            byte[] buffer = new byte[20];
            try {
                for (int i = 0; i < 26; i++) {
                    //消费对方线程生产的字母
                    System.out.print(queue.take());

                    //生产数字等对方线程消费
                    queue.transfer(i + 1 + "");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }).start();
    }
}
